package org.sean.framework.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Object 参数
 *
 * @author xielei
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface SyncObject {

    /**
     * 参数位置
     * <pre>
     * example:
     * void method(String arg1,String arg2)
     * arg1: index 0
     * arg2: index 1
     * </pre>
     *
     * @return 位置
     */
    int index() default 0;

    /**
     * <pre>
     * 查找属性名,如果是多层结构用 '.' 分割, | 表示或
     * example: data.user.name
     * example: data.user.name|data.user.id
     * </pre>
     *
     * @return key
     */
    String key();

    /**
     * 同步key 有效期
     *
     * @return 有效期
     */
    int expire() default SyncConstants.EXPIRE;

    /**
     * 同步超时时间
     *
     * @return 超时时间
     */
    int timeout() default SyncConstants.TIMEOUT;

    /**
     * @return 超时后是否抛出异常
     */
    boolean timeoutException() default SyncConstants.TIMEOUT_EXCEPTION;

    /**
     * @return 超时后是否返回, 优先于 timeoutException
     */
    boolean timeoutReturn() default SyncConstants.TIMEOUT_RETURN;

    /**
     * @return 是否忽略执行
     */
    boolean ignore() default false;
}
